package util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;

public class fileUtils {

	/**
	 * 파일명을 제외한 나머지 경로
	 * @param filePath : 파일 전체 경로
	 * @return
	 */
	static public String getPath(String filePath) {
		return new File(filePath).getParent();
	}
	
	/**
	 * 파일명만 전달
	 * @param filePath : 파일 전체 경로
	 * @return
	 */
	static public String getName(String filePath) {
		return new File(filePath).getName();
	}
	
	/**
	 * 파일명에서 확장자를 제외한 나머지
	 * @param filePath : 파일 전체 경로
	 * @return
	 */
	static public String getOnlyFileName(String filePath) {
		String tempString = getName(filePath); 
		return tempString.substring(0, tempString.lastIndexOf("."));
	}
	
	/**
	 * 확장자만 전달
	 * @param filePath : 파일 전체 경로
	 * @return
	 */
	static public String getExtName(String filePath) {	
		return filePath.substring(filePath.lastIndexOf(".") + 1);
	}
	
	/**
	 * 파일 복사
	 * @param srcFile : 원본 파일
	 * @param dstFile : 결과 파일
	 * @return
	 */
	static int copyFile(String srcFile, String dstFile) {
		int nRet = 0;
		
		
		FileInputStream inputStream = null;
		FileOutputStream outputStream = null;
		FileChannel fcin = null;
		FileChannel fcout = null;
		
		try {
			
			File sourceFile = new File(srcFile);
			File targetFile = new File(dstFile);
			
			inputStream = new FileInputStream(sourceFile);
			outputStream = new FileOutputStream(targetFile);
			
			fcin = inputStream.getChannel();
			fcout = outputStream.getChannel();
			
			long fSize = fcin.size();
			
			long lSize = fcin.transferTo(0, fSize, fcout);
			
			if(fSize != lSize) {
				nRet = -1;
			}
			
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			
			try {
				fcout.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				fcin.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				outputStream.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				inputStream.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		return nRet;
	}
	
	static public void copyDirectory(String srcFolder, String dstFolder) {
		
		File tmpSrcFolder = new File(srcFolder);
		File tmpDstFolder = new File(dstFolder);
		if(tmpSrcFolder.isDirectory()) {
			if(!tmpDstFolder.exists()) {
				tmpDstFolder.mkdirs();
			}
			String[] childFolder = tmpSrcFolder.list();
			for(String s : childFolder) {
				copyDirectory(tmpSrcFolder.toString() + "\\" + s, tmpDstFolder.toString() + "\\" + s);
			}
		} else {
			copyFile(srcFolder.toString(), dstFolder.toString());
		}
	}
	
	static public boolean deleteDirectory(String srcFolder) {
		
		File tmpSrcFolder = new File(srcFolder);
		if(tmpSrcFolder.isDirectory()) {
			File[] childFile = tmpSrcFolder.listFiles();
			for(File file : childFile) {
				if(file.isFile()) {
					file.delete();
				} else { 
					deleteDirectory(file.toString());
				}
			}
		}
		tmpSrcFolder.delete();
		return tmpSrcFolder.exists();
	}
	
	
	public static void main(String[] args) {
		
		System.out.println("start!! ");
		//copyFile("c:\\2\\sdp.war", "c:\\2\\sdp_copy.war");
		//copyDirectory("c:\\2\\1", "c:\\2\\2");
		deleteDirectory("c:\\2\\2\\");
		System.out.println("end");
	}
}
